﻿//#define _CRT_SECURE_NO_WARNINGS  1
////一定要动手，例子不管多么简单，建议至少自己手敲一遍看看是否理解了里头的细枝末节。
////一定要学会思考，思考为什么要这样，而不是那样。还要举一反三地思考
//#include<iostream>
//using namespace std;
//template <class _age, class _name = string>
//class person {
//public:
//	int _age;
//	string _name;
//public:
//	person(int age, string name)
//	{
//		this->_age = age;
//		this->_name = name;
//	}
//	void print()
//	{
//		cout << "姓名:" << this->_name << "   年龄：" << this->_age << endl;
//	}
//
//};
//void ShowPrint1(person<int, string> p1)
//{
//	p1.print();
//}
////指定传入的类型   --- 直接显示对象的数据类型
//void test01()
//{
//	person<int, string> p1(999, "孙悟空");
//	ShowPrint1(p1);
//}
////参数模板化           --- 将对象中的参数变为模板进行传递
//template <class T1,class T2>
//void ShowPrint2(person<T1,T2> & p)
//{
//	p.print();
//	cout << "T1的类型为： " << typeid(T1).name() << endl;
//	cout << "T2的类型为： " << typeid(T2).name() << endl;
//}
//void test02()
//{
//	person<int, string> p2(888, "猪八戒");
//	ShowPrint2(p2);
//}
////整个类模板化       --- 将这个对象类型 模板化进行传递
//template <class T>
//void ShowPrint3(T & p)
//{
//	p.print();
//	cout << "T的类型为： " << typeid(T).name() << endl;
//}
//void test03()
//{
//	person<int, string> p3(20, "唐僧");
//	ShowPrint3(p3);
//}
//int main()
//{
//	test01();
//	test02();
//	test03();
//	system("pause");
//	return 0;
//}